iT邦幫忙

1

【C#】Delegate and Events

c#
  • 分享至 

  • xImage
  •  

如果我們把方法作為參數傳遞給方法,就會用到委託~

委託大致有三個步驟~

第一是委託宣告 ~ 第二是方法塞入 ~ 第三是委託調用 ~

那我們來看委託是如何被實現的吧 ~


學習目標: Delegate and Events的概念

學習難度: ☆☆☆


using System;

namespace ConsoleApp1
{
    class MainProgram
    {
        public delegate void Project(string name); //委託宣告

        static void GameFactory1(string name)
        {
            Console.WriteLine(name + "made by GameFactory1");
        }

        static void GameFactory2(string name)
        {
            Console.WriteLine(name + "made by GameFactory2");
        }

        static void Main(string[] args)
        {
            //方法塞入委派

            Project task1 = new Project(GameFactory1);

            //方法塞入委派

            Project task2 = GameFactory2;

            //方法塞入委派

            Project task3 = (string name) => Console.WriteLine(name + "made by students");

            task1("car game"); //調用委派

            task1("gun game"); //調用委派

            task1("RPG game"); //調用委派
        }
    }
}

接著來看到事件~ 事件是一個對象發送的通知~ 表示發生一個動作~

事件方送通知後~ 委派會去執行它的任務~

那我們來看事件是如何被實現的吧 ~


using System;

namespace ConsoleApp1
{
    public delegate void Project(string name);  // 專案委派

    public class ProjectEvent
    {
        public event Project NewProject; // 專案事件

        public void ProjectStart(string name) // 專案介紹
        {
            Console.WriteLine("Project name is" + " " + name);

            ProjectState(name); // 專案狀態
        }

        protected virtual void ProjectState(string name) //protected virtual method
        {
            //if NewProject is Game then call delegate

            if (name == "Game")
            {
                NewProject.Invoke(name); //呼叫委派
            }
            else
            {
                Console.WriteLine("Project is not a game !");
            }
        }
    }

    class MainProgram
    {
        // event handler
        
        public static void ProjectState(string name)
        {
            Console.WriteLine($"{name} Project is Active !");
        }

        public static void Main()
        {
            ProjectEvent project = new ProjectEvent();

            project.NewProject += ProjectState; //註冊事件

            project.ProjectStart("Game");  //啟動遊戲專案

            project.ProjectStart("DataBase"); //啟動資料庫專案
        }
    }
}

參考資料:

https://www.tutorialsteacher.com/csharp/csharp-delegates

https://www.tutorialsteacher.com/csharp/csharp-event

https://ithelp.ithome.com.tw/articles/10228906


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言